/**
 * 本地存储工具函数
 * 提供对localStorage和sessionStorage的操作封装
 */

/**
 * 从本地存储获取数据
 * 
 * @param key 存储键名
 * @param defaultValue 默认值（如果存储中不存在该键）
 * @returns 存储的值或默认值
 */
export function getStorageItem<T>(key: string, defaultValue: T): T {
  try {
    const item = localStorage.getItem(key);
    // 如果item不存在，返回默认值
    if (item === null) return defaultValue;
    
    // 尝试解析JSON数据
    return JSON.parse(item) as T;
  } catch (error) {
    console.error(`从localStorage获取${key}时出错:`, error);
    return defaultValue;
  }
}

/**
 * 设置数据到本地存储
 * 
 * @param key 存储键名
 * @param value 要存储的值
 */
export function setStorageItem<T>(key: string, value: T): void {
  try {
    const serializedValue = JSON.stringify(value);
    localStorage.setItem(key, serializedValue);
  } catch (error) {
    console.error(`保存${key}到localStorage时出错:`, error);
  }
}

/**
 * 从本地存储移除数据
 * 
 * @param key 存储键名
 */
export function removeStorageItem(key: string): void {
  try {
    localStorage.removeItem(key);
  } catch (error) {
    console.error(`从localStorage移除${key}时出错:`, error);
  }
}

/**
 * 清空本地存储
 */
export function clearStorage(): void {
  try {
    localStorage.clear();
  } catch (error) {
    console.error('清空localStorage时出错:', error);
  }
}

/**
 * 从会话存储获取数据
 * 
 * @param key 存储键名
 * @param defaultValue 默认值（如果存储中不存在该键）
 * @returns 存储的值或默认值
 */
export function getSessionItem<T>(key: string, defaultValue: T): T {
  try {
    const item = sessionStorage.getItem(key);
    // 如果item不存在，返回默认值
    if (item === null) return defaultValue;
    
    // 尝试解析JSON数据
    return JSON.parse(item) as T;
  } catch (error) {
    console.error(`从sessionStorage获取${key}时出错:`, error);
    return defaultValue;
  }
}

/**
 * 设置数据到会话存储
 * 
 * @param key 存储键名
 * @param value 要存储的值
 */
export function setSessionItem<T>(key: string, value: T): void {
  try {
    const serializedValue = JSON.stringify(value);
    sessionStorage.setItem(key, serializedValue);
  } catch (error) {
    console.error(`保存${key}到sessionStorage时出错:`, error);
  }
} 